'##############
'Getriebe-Script
'##############

'Manual Gearbox


'Script Version: 0.1
'Omsi release: 1.01

'Needs:
'- engine
'- bremse

'Revision History:
'- Kyle Ortiz	17.01.2012	Original script based off of Automatic transmission Script; debugged gear controls
'- Kyle Ortiz	18.01.2012	Clutch Fraction recognized  
'- Kyle Ortiz	22.01.2012	Added 6th and 7th Gear to the bus 
'- Kyle Ortiz	12.02.2012	Fixed stall while in gear - no more shaking


'----------------------
'	Init
'----------------------

{trigger:kw_s_R_fest}
	-1 (S.L.antrieb_getr_aktugang)

{end}

{trigger:kw_s_N}
	0 (S.L.antrieb_getr_aktugang)

{end}

{trigger:kw_s_1_fest}
 1 (S.L.antrieb_getr_aktugang)
 (T.L.ev_schaltruck)

{end}

{trigger:kw_s_2_fest}
 2 (S.L.antrieb_getr_aktugang)
   0 (S.L.antrieb_kickdown_sense)
 (T.L.ev_schaltruck)
{end}

{trigger:kw_s_3_fest}
(C.L.antrieb_number_gears) 2 >

	 3 (S.L.antrieb_getr_aktugang)
	 0 (S.L.antrieb_kickdown_sense)
 {endif}
{end}

{trigger:kw_s_4_fest}
(C.L.antrieb_number_gears) 3 >

	4 (S.L.antrieb_getr_aktugang)
	0 (S.L.antrieb_kickdown_sense)
	 (T.L.ev_schaltruck) 
 {endif}
{end}

{trigger:kw_s_5_fest}
(C.L.antrieb_number_gears) 4 >

	5 (S.L.antrieb_getr_aktugang)
	0 (S.L.antrieb_kickdown_sense)
	(T.L.ev_schaltruck)
{endif}
{end}

{trigger:kw_s_6_fest}
(C.L.antrieb_number_gears) 5 >
 {if}
	6 (S.L.antrieb_getr_aktugang)
	 0 (S.L.antrieb_kickdown_sense)
	 (T.L.ev_schaltruck)
 {endif}
{end}

{trigger:kw_s_7}
(C.L.antrieb_number_gears) 6 >
 {if}
	 7 (S.L.antrieb_getr_aktugang)
	 0 (S.L.antrieb_kickdown_sense)
	(T.L.ev_schaltruck)
  {endif}
{end}

{trigger:kw_s_8}
(C.L.antrieb_number_gears) 7 >
 {if}
	 8 (S.L.antrieb_getr_aktugang)
	0 (S.L.antrieb_kickdown_sense)
	(T.L.ev_schaltruck)
  {endif}

{end}

{trigger:kw_s_9}
(C.L.antrieb_number_gears) 8 >
 {if}
	9 (S.L.antrieb_getr_aktugang)
	0 (S.L.antrieb_kickdown_sense)
	(T.L.ev_schaltruck)
  {endif}	

{end}


{trigger:kw_s_10}
 10 (S.L.antrieb_getr_aktugang)
 0 (S.L.antrieb_kickdown_sense)
 (T.L.ev_schaltruck)

{end}


{trigger:upshift}

 (L.L.antrieb_kickdown_sense) 0.5 >
 {if}
	(L.L.antrieb_getr_aktugang) 1 + (S.L.antrieb_getr_aktugang)
	0 (S.L.antrieb_kickdown_sense)
	(T.L.ev_schaltruck)
  {endif}


{end}


{trigger:downshift}

 (L.L.antrieb_kickdown_sense) 0.5 >
 {if}
	(L.L.antrieb_getr_aktugang) 1 - (S.L.antrieb_getr_aktugang)
	0 (S.L.antrieb_kickdown_sense)
	(T.L.ev_schaltruck)
  {endif}


{end}
{trigger:kw_s_1_fest_off}
{trigger:kw_s_2_fest_off}
{trigger:kw_s_3_fest_off}
{trigger:kw_s_4_fest_off}
{trigger:kw_s_5_fest_off}
{trigger:kw_s_6_fest_off}
{trigger:kw_s_R_fest_off}
	0 (S.L.antrieb_getr_aktugang) 
{end}
{end}
{end}
{end}
{end}
{end}

{macro:antrieb_init}
	1 (S.L.antrieb_getr_gangwahl) (S.L.antrieb_getr_gangvorwahl)
	1 (S.L.antrieb_getr_aktugang)
	
	0 (S.L.antrieb_wandler_moment)
{end}

'----------------------
'	Frame
'----------------------

{macro:antrieb_frame}

'Berechnen der Abtriebsdrehzahl
	(L.L.Wheel_RotationSpeed_1_L) (L.L.Wheel_RotationSpeed_1_R) + 2 / (C.L.antrieb_i_achse) * (S.L.antrieb_n_kardanwelle)

'Gang rausnehmen, wenn Neutral angefordert






'Prüfen, ob Gang gewechselt wird - aber nur, wenn Getriebe heil ist:

	(L.L.antrieb_failure_general) !
	{if}
		(M.L.antrieb_getr_chkNxtGear)
	{endif}

'Berechnung des aktuellen Motordrehmoments:

	(M.L.engine_moment)



'Berechnung des dynamischen Schaltmoments

	(L.L.antrieb_getr_fest) !
	{if}
		(L.L.antrieb_schaltmoment) (L.S.Timegap) 1000 * + (L.L.antrieb_schaltmoment_soll) min (S.L.antrieb_schaltmoment)
	{endif}





'Fallunterscheidung, ob Getriebe reibt oder wandelt oder nicht:

	(L.L.antrieb_getr_fest)
	{if}

'#################################################################################
'	Berechnung der Beschleunigung des Antriebsstrangs (am Motorflansch)
'#################################################################################


		(L.L.n_Wheel) (L.L.antrieb_getr_ratio) * (L.L.engine_n) - 2 * pi * 60 / (L.S.Timegap) / 

'	Berechnung des Momentes am Motor durch Trägheit:

		(C.L.engine_J) * s0

'	Berechnung des vom Antriebsstrang durchgeleiteten Momentes

		l0 /-/ (L.L.engine_M) (L.L.engine_M_additional_load) - + s1


'	Wenn das Antriebsmoment zu groß ist oder ein Wandlergang eingelegt wird, rutscht die Kupplung durch:

		l1 abs (L.L.antrieb_schaltmoment) > (L.L.antrieb_getr_gangwahl) 1 <= || (L.L.antrieb_getr_aktugang) 1 = || 


		{if}

			0 (S.L.antrieb_getr_fest)

		{else}

'		Setzen des Momentes

			l1 (S.L.antrieb_getr_M_an)


'		Berechnung des Getriebeabtriebmomentes:

			(L.L.antrieb_getr_M_an) (L.L.antrieb_getr_ratio) * (C.L.gear_efficiency) * (S.L.M_Wheel)

'		Drehzahl des Motors ergibt sich aus der Getriebeabtriebswelle:

			(L.L.antrieb_getr_ratio) (L.L.n_Wheel) * (S.L.engine_n)		
		{endif}


		0 (S.L.antrieb_wandler_moment)

	{else}

'#################################################################################
'	Bestimmen, ob Leerlauf ist...:
'#################################################################################

		(L.L.antrieb_getr_aktugang) 0 = (L.L.clutch) 0.95 > ||

		{if}

'		... Antriebs- und Getriebeantriebsmoment sind 0:
			0 (S.L.M_Wheel) (S.L.antrieb_getr_M_an)

			(M.L.engine_acceleration)
			0 (S.L.antrieb_wandler_moment)

'			Wenn Neutralgang beim Bremsen eingelegt wird
			(L.L.antrieb_getr_gangwahl) 1 =
			{if}
				0 (S.L.antrieb_retarder_wasrunning) (S.L.antrieb_gear_engaged_timer)
			{endif}

		{else}

'#################################################################################
'		Bestimmen, ob ein Wandlergang eingelegt ist...:
'#################################################################################


		


'			Berechnung der Drehzahldifferenz:

				(L.L.antrieb_getr_ratio) (L.L.n_Wheel) * (L.L.engine_n) - s0



'			An dieser Stelle muss ggf. noch das unterschiedliche Kupplungsmoment eingesetzt werden:

				l0 0 <
				{if}
					(L.L.antrieb_schaltmoment) 
				{else}
					(L.L.antrieb_schaltmoment) /-/
				{endif}
				(S.L.antrieb_getr_M_an)
				(L.L.antrieb_getr_ratio) *
				(C.L.gear_efficiency) * (S.L.M_Wheel)

				(M.L.engine_acceleration)

'			Prüfen, ob sich das Vorzeichen der Drehzahldifferenz umgekehrt hat:

				(L.L.antrieb_getr_ratio) (L.L.n_Wheel) * (L.L.engine_n) - l0 * 0 <= 
				{if}
					(L.L.antrieb_getr_ratio) (L.L.n_Wheel) * (S.L.engine_n)
					(L.L.n_Wheel) (L.L.antrieb_getr_ratio) * (L.L.engine_n) - 2 * pi * 60 / (L.S.Timegap) / 

'					Berechnung des Momentes am Motor durch Trägheit:

					(C.L.engine_J) * s0

'					Berechnung des vom Antriebsstrang durchgeleiteten Momentes

					l0 /-/ (L.L.engine_M) (L.L.engine_M_additional_load) - + (S.L.antrieb_getr_M_an)


'					Berechnung des Getriebeabtriebmomentes:

					(L.L.antrieb_getr_M_an) abs (L.L.antrieb_schaltmoment) abs <
					{if}
						(L.L.antrieb_getr_M_an) (L.L.antrieb_getr_ratio) * (C.L.gear_efficiency) * (S.L.M_Wheel)
						1 (S.L.antrieb_getr_fest)
						(C.L.antrieb_kuppl_M_up_max)  (S.L.antrieb_schaltmoment)
					{else}
						(L.L.antrieb_schaltmoment) /-/ (S.L.antrieb_getr_M_an) (L.L.antrieb_getr_ratio) * (C.L.gear_efficiency) * (S.L.M_Wheel)
					{endif}
					




			{endif}
		{endif}

	{endif}



{end}



'#################################################################################
'	Bestimmung der Schaltgeschwindigkeiten
'#################################################################################

{macro:antrieb_getr_chkNxtGear}

'	Höchster Gang: s0!

'	Verzögerung der Kickdown-Schaltung:

	(L.L.throttle) 1 =
	{if}
		(L.L.antrieb_kickdown_stellglied) (L.S.Timegap) 2 * + 1 min (S.L.antrieb_kickdown_stellglied)
		1 =
		{if}
			1 (S.L.antrieb_kickdown)
		{endif}
	{else}
		(L.L.antrieb_kickdown_stellglied) (L.S.Timegap) 1 * - 0 max (S.L.antrieb_kickdown_stellglied)
		0 =
		{if}
			0 (S.L.antrieb_kickdown)
		{endif}
	{endif}

'	Verzögerung der gaspedalabhängigen Schaltschwelle:

	
	(L.L.throttle) (L.L.antrieb_throttle_stellglied) >
	{if}
		(L.L.antrieb_throttle_stellglied) (L.S.Timegap) 1 * + (L.L.throttle) min (S.L.antrieb_throttle_stellglied)
	{else}
		(L.L.antrieb_throttle_stellglied) (L.S.Timegap) 0.5 * - (L.L.throttle) max (S.L.antrieb_throttle_stellglied)
	{endif}
	
'	Berechnen der aktuellen Beschleunigung:
	
	(L.L.Velocity) (L.L.antrieb_last_geschwindigkeit) - 3.6 / (L.S.Timegap) / (S.L.antrieb_beschleunigung)
	(L.L.Velocity) (S.L.antrieb_last_geschwindigkeit)
	
	





		(C.L.antrieb_kuppl_M_up_max) (L.L.clutch) (F.L.clutch_friction) *  s6
		(C.L.antrieb_kuppl_M_up_min) (L.L.clutch) (F.L.clutch_friction) *  s7
		(M.L.antrieb_getr_schaltmoment) (S.L.antrieb_schaltmoment_soll)	(S.L.antrieb_schaltmoment)

		(L.L.clutch) 0.1 < (L.L.antrieb_kickdown_sense) 1 < &&
		{if}
			(L.L.antrieb_kickdown_sense) (L.S.Timegap) 0.5 * + 1 min (S.L.antrieb_kickdown_sense)
					
		{else}
			1 (S.L.antrieb_kickdown_sense)
		 {endif}
				

			(L.L.antrieb_getr_aktugang) s1

			1 =
			{if}
				(C.L.antrieb_getr_ratio1) (C.L.antrieb_i_achse) * (S.L.antrieb_getr_ratio)

				

					(C.L.antrieb_kuppl_M_up_max) (L.L.clutch) (F.L.clutch_friction) * s6
					(C.L.antrieb_kuppl_M_up_min) (L.L.clutch) (F.L.clutch_friction) * s7
					(M.L.antrieb_getr_schaltmoment) (S.L.antrieb_schaltmoment_soll)	(S.L.antrieb_schaltmoment)

				   	
					(L.L.throttle) 0.82 * (S.L.engine_throttle_injection)

				
			{endif}

			l1 -1 =
			{if}
				(C.L.antrieb_getr_ratioR) (C.L.antrieb_i_achse) * (S.L.antrieb_getr_ratio)
	       			(L.L.throttle) 0.6 * (S.L.engine_throttle_injection)	
				 
			      (L.L.antrieb_kickdown_sense) (L.S.Timegap) 0.5 * +  (S.L.antrieb_kickdown_sense)
			{endif}

			l1 2 =
			{if}
				(C.L.antrieb_getr_ratio2) (C.L.antrieb_i_achse) * (S.L.antrieb_getr_ratio)
	       				
				(L.L.antrieb_kickdown_sense) (L.S.Timegap) 0.5 * + (S.L.antrieb_kickdown_sense) 

			{endif}
			l1 3 =
			{if}
				(C.L.antrieb_getr_ratio3) (C.L.antrieb_i_achse) * (S.L.antrieb_getr_ratio)

				(L.L.antrieb_kickdown_sense) (L.S.Timegap) 0.5 * +  (S.L.antrieb_kickdown_sense)
			{endif}

			l1 4 =
			{if}
				 (C.L.antrieb_getr_ratio4) (C.L.antrieb_i_achse) * (S.L.antrieb_getr_ratio)

			       (L.L.antrieb_kickdown_sense) (L.S.Timegap) 0.5 * + (S.L.antrieb_kickdown_sense)
			{endif}

			l1 5 =
			{if}
				(C.L.antrieb_getr_ratio5) (C.L.antrieb_i_achse) * (S.L.antrieb_getr_ratio)

				(L.L.antrieb_kickdown_sense) (L.S.Timegap) 0.5 * + (S.L.antrieb_kickdown_sense)
			{endif}

			l1 6 =
			{if}
				(C.L.antrieb_getr_ratio6) (C.L.antrieb_i_achse) * (S.L.antrieb_getr_ratio)

			       (L.L.antrieb_kickdown_sense) (L.S.Timegap) 0.5 * +  (S.L.antrieb_kickdown_sense)
			{endif}


			l1 7 =
			{if}
				(C.L.antrieb_getr_ratio7) (C.L.antrieb_i_achse) * (S.L.antrieb_getr_ratio)

			       (L.L.antrieb_kickdown_sense) (L.S.Timegap) 0.5 * +  (S.L.antrieb_kickdown_sense)
			{endif}


			l1 8 =
			{if}
				(C.L.antrieb_getr_ratio8) (C.L.antrieb_i_achse) * (S.L.antrieb_getr_ratio)

			       (L.L.antrieb_kickdown_sense) (L.S.Timegap) 0.5 * +  (S.L.antrieb_kickdown_sense)
			{endif}


			l1 9 =
			{if}
				(C.L.antrieb_getr_ratio9) (C.L.antrieb_i_achse) * (S.L.antrieb_getr_ratio)

			       (L.L.antrieb_kickdown_sense) (L.S.Timegap) 0.5 * +  (S.L.antrieb_kickdown_sense)
			{endif}

			l1 10 =
			{if}
				(C.L.antrieb_getr_ratio10) (C.L.antrieb_i_achse) * (S.L.antrieb_getr_ratio)

			       (L.L.antrieb_kickdown_sense) (L.S.Timegap) 0.5 * +  (S.L.antrieb_kickdown_sense)
			{endif}




	{endif}
	{endif}


'	Testweise: Differenzialdrehzahlpfeifen

	(L.L.engine_n) (L.L.antrieb_n_kardanwelle) 2 * - (S.L.antrieb_n_differenz)





{end}

{macro:antrieb_getr_chkCh}
'	Berechnung der aktuellen Hochschaltschwelle: (l3 = bei Vollgas, l4 = bei Leergas)
	(L.L.antrieb_throttle_stellglied) s2 l3 * 1 l2 - l4 * +
{end}

{macro:antrieb_getr_schaltmoment}
'	Berechnung des Schaltmomentes (l6 = bei Vollgas, l7 = bei Leergas)
	(L.L.antrieb_throttle_stellglied) s5 l6 * 1 l5 - l7 * +
{end}













